package javaTest02.exercise_3;

import javaTest02.utils.Person;
import javaTest02.utils.LogMethodInvoke;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;

public class DynamicProxy implements InvocationHandler {
    private Person proxied;
    private String path;

    public DynamicProxy(Person person,String path){
        this.proxied = person;
        this.path = path;
    }

    /**
     * @param proxy 调用该方法的代理实例
     * @param method 代理实例上对应的接口方法
     * @param args 方法的参数数组
     * @return 从代理实例上的方法调用返回的值。
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object res=method.invoke(this.proxied,args);//执行方法
        LogMethodInvoke.log(method.getName(),//日志记录
                Arrays.toString(args).split(","),this.path);
        return res;
    }
}
